<?php

/**
 * alltosun.com 积分记录列表 score_record.php
 * ============================================================================
 * 版权所有 (C) 2009-2014 北京互动阳光科技有限公司，并保留所有权利。
 * 网站地址: http://www.alltosun.com
 * ----------------------------------------------------------------------------
 * 许可声明: 这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
 * ============================================================================
 * $Author: 高昂 (gaoa@alltosun.com) $
 * $Date: 2015-7-3 上午9:42:33 $
 * $Id: score_record.php 161193 2016-01-10 12:33:57Z gaoa $
 */
class score_record_widget
{
    // 每页显示条数
    private $per_page = 20;

    public function get_score_record_list($user_id, $page_no = 1) {
        $record_filter = array();
        $record_filter['user_id'] = $user_id;

        $record_list = get_app_data_list('score_record', $record_filter, 'ORDER BY `id` DESC ', $page_no, $this->per_page);
        if (!$record_list) {
            return false;
        }

        $record_list['data'] = score_record_helper::score_record_format($record_list['data']);

        $record_list['score_info'] = array();
        //获取用户的总积分
        $record_list['score_info']['score'] = round(score_record_helper::get_user_score($user_id));
        //获取用户积分等级
        $record_list['score_info']['level'] = score_record_helper::get_user_score_level($record_list['score_info']['score']);
        //获取到达下一等级仍需的积分数
        $record_list['score_info']['score_left'] = score_record_helper::score_left($record_list['score_info']['score']);
        //获取到达此积分等级的人数
        $record_list['score_info']['arrive_level_user_num'] = score_record_helper::arrive_level_user_num($record_list['score_info']['level']);


        return $record_list;
    }


    /**
     * 对外的增加积分的接口
     * @param $user_id 当前登陆用户id
     * @param $store_id ,店铺的id
     * @param $order_id ,订单的id
     * @param $score 积分数,如果需要减积分,直接传负数即可
     * @param $res_id 积分类型id(管理员添加是1,进货是2,发货是3,违规是4,用户初始添加积分是5,核销是6,默认是进货2)
     * @param $admin_id , 执行添加积分的用户id(默认是系统添加id=0)
     */
    public function change_score($user_id, $store_id, $order_id, $score, $res_id = 2, $admin_id = 0) {
        if (!$user_id) {
            return '用户id未知';
        }

        if (!$order_id) {
            return '订单id未知';
        }

        if (!$store_id) {
            return '店铺id未知';
        }

        if (!$score || !is_numeric($score)) {
            return '没有传入积分数,或积分格式错误';
        }

        // 验证当前登陆用户和店铺是否对应
        /* $res = store_helper::get_user_store($user_id);
        if (!$res) {
            return '用户和店铺不对应';
        } */

        // 创建数据
        $score_record['user_id'] = $user_id;
        $score_record['order_id'] = $order_id;
        $score_record['score'] = $score;
        $score_record['admin_id'] = $admin_id;
        $score_record['res_id'] = $res_id;
        $score_record['add_time'] = date('Y-m-d H:i:s', time());

        $record_id = _model('score_record')->create($score_record);
        //增加user表中的用户总积分
        $user_info = _uri('user', $user_id);

        if ($user_info) {
            $new_score = $score + $user_info['score'];
            _model('user')->update($user_id, array('score' => $new_score));
        } else {
            return '用户不存在';
        }

        if ($record_id) {
            return 'success';
        } else {
            return '记录写入错误';
        }
    }

    /**
     * 积分数格式化
     * @param number $num 总价格或箱子数
     * @param int $is_dealer 是否是经销商默认为0 是经销商 为1 不是则为0
     * @param int $dealer_level 经销商的等级,默认是1
     * @param int $is_same 进货价是否相同,1:相同 0:不相同,默认是0
     * @return unknown 如果不是经销商默认返回价格转换的积分数;
     *          如果是经销商则返回(根据经销商的等级)返回需要增加的积分数:
     *              如果等级为1, 返回一级经销商的积分数,
     *              如果等级为2, 返回二级经销商和已经经销商的积分数
     */

    public function score_format($num, $is_dealer = 0, $dealer_level = 1, $is_same = 0) {
        if (!is_numeric($num)) {
            return false;
        }

        // 判断是否是经销商 
        if (!$is_dealer) {
            // 一块钱一个积分
            return round($num);
        } else {
            if ($dealer_level == 1) {
                // 如果经销商为1级
                return round($num) * 10;
            } else {
                // 如果进货价相同
                if ($is_same) {
                    return array('dealer_one' => round($num) * 2, 'dealer_two' => round($num) * 8);
                } else {
                    return array('dealer_one' => round($num) * 0.5, 'dealer_two' => round($num) * 9.5);
                }

            }

        }
    }

    /**
     * 换算积分
     * @param  [type] $store_id [description]
     * @param  [type] $box_num  [description]
     * @param  [type] $price    [description]
     * @return [type]           [description]
     */
    public function format_store_order_score($store_id, $box_num, $price) {
        //获取门店信息
        $store_info = store_helper::get_store($store_id);

        //获取门店店长身份
        $user_role_id = user_helper::get_user_role_id($store_info['user_id']);

        if ($user_role_id == 5) {
            // 获取用户信息
            $user_info = _uri('user', $store_info['user_id']);

            //如果是一级经销商，直接加积分
            if ($user_info['dealer_level'] == 1) {
                //换算积分
                $score = _widget('score_record')->score_format($box_num, 1, 1);
                $return_score = array(
                    'score' => $score
                );
            } else { //如果是二级经销商，需要给一级经销商加积分
                //判断两个经销商的进货价是否想通
                $is_same = order_helper::contrast_user_price($user_info['id'], $user_info['parent_id']);
                //换算积分
                $score = _widget('score_record')->score_format($box_num, 1, 2, $is_same);
                $return_score = array(
                    'score' => $score['dealer_two'],
                    'score_one' => $score['dealer_one']
                );
            }
        } else {
            $score = _widget('score_record')->score_format($price);
            $return_score = array(
                'score' => $score
            );
        }
        return $return_score;
    }


}